package controllers;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import play.*;
import play.mvc.*;

import models.*;

@With(Secure.class)
public class CISServices extends CRUD { 

	@Before
	static void setConnectedUser() {
		if(Security.isConnected()) {
			Agent agent = Agent.find("byEmail", Security.connected()).first();
			renderArgs.put("agent_email", agent.email);
			renderArgs.put("agent_fullname", agent.fullname());
			renderArgs.put("agent_responsable", agent.getCisService().isResponsable(agent));
			renderArgs.put("agent_orga", !agent.isOrgaStage(agent));
			renderArgs.put("resp", (agent.isOrgaStage(agent) || SystemSDIS.getSystemSDIS().isResponsableDepartemental(agent)));
			if(agent.niv.id != 0){
				renderArgs.put("agent_for", agent.niv);
			}
			renderArgs.put("agent_respPedago", SystemSDIS.getSystemSDIS().isResponsableDepartemental(agent));
		}
	}

	/**
	 * action permettant d'afficher les candidatures que l'agent peut authoriser pour le CISService
	 * dont l'id est passé en paramètre
	 * @param id l'id du CISService dont les candidatures doivent etre authorisées
	 */
	public static void autorisationCandidatures(long id){

		List<Candidat> listeARender=new ArrayList<Candidat>();
		//recuperation des stages correspondant a la structure passé en paramètres
		List<Stage> stages=Stage.findAll();
		Iterator<Stage> itStages=stages.iterator();
		Stage stage;
		List<Candidat> listCandid;
		Iterator<Candidat> itCandid;
		Candidat candidat;

		//parcours des stages de la structure d'id passe en param
		while(itStages.hasNext()){
			stage=itStages.next();

			listCandid=stage.getCandidatures();

			itCandid=listCandid.iterator();
			//parcours des candidat d'un stage.
			while(itCandid.hasNext()){
				candidat=itCandid.next();
				//si la candid est en attente d'authorisation, ajout dans la liste des candidatures
				//a afficher

				if(candidat.getEtatCandid().getNumEtat()==1 && candidat.getAgent().getCisService().getId()==id){
					listeARender.add(candidat);
				}
			}

		}
		render(listeARender,id);

	}
	
	public static void voirCandid(long id){
		List<Candidat> listeARender=new ArrayList<Candidat>();
		//recuperation des stages correspondant a la structure passé en paramètres
		List<Stage> stages=Stage.findAll();
		Iterator<Stage> itStages=stages.iterator();
		Stage stage;
		List<Candidat> listCandid;
		Iterator<Candidat> itCandid;
		Candidat candidat;

		//parcours des stages de la structure d'id passe en param
		while(itStages.hasNext()){
			stage=itStages.next();

			listCandid=stage.getCandidatures();

			itCandid=listCandid.iterator();
			//parcours des candidat d'un stage.
			while(itCandid.hasNext()){
				candidat=itCandid.next();
				//si la candid est en attente d'authorisation, ajout dans la liste des candidatures
				//a afficher
				if(candidat.getEtatCandid().getNumEtat()!=1 && candidat.getAgent().getCisService().getId()==id){
					listeARender.add(candidat);
				}
			}

		}
		render(listeARender);
	}
	
	/**
	 * redirige vers la liste des candid d'un CIS si l'agent n'est resp que d'un CISService
	 * affiche la liste des cisService possible sinon
	 */
	public static void choixAutorisationCandidatures(){
		Agent agent = Agent.find("byEmail", Security.connected()).first();
		List<CISService> listCis=CISService.getResponsabiliteeCISService(agent);

		if(listCis.size()==1){
			autorisationCandidatures(listCis.get(0).getId());
		}

		else{
			render(listCis);
		}

	}

	//recupere les checkbox et passe les candid dans l'etat désiré, si besoins.
	public static void envoieAutorisation(){

		String id=params.get("id");
		List<Stage> stages=Stage.findAll();
		Iterator<Stage> itStages=stages.iterator();
		Stage stage;
		List<Candidat> listCandid;
		Iterator<Candidat> itCandid;
		Candidat candidat;
		EtatCandid etatOK=EtatCandid.find("numEtat = 3").first();
		EtatCandid etatNON=EtatCandid.find("numEtat = 2").first();

		//parcours des stages
		while(itStages.hasNext()){
			stage=itStages.next();

			listCandid=stage.getCandidatures();

			itCandid=listCandid.iterator();
			//parcours des candidat d'un stage.
			while(itCandid.hasNext()){
				candidat=itCandid.next();
				//recuperation pour chaque candid des contenut des checkbox
				if(candidat.getEtatCandid().getNumEtat()==1 && candidat.getAgent().getCisService().getId().equals(new Long(id))){
					//si la case oui a été coché pour ce candidat
					//passage de la candid en etat "attente validation"
					if(params.get("O"+candidat.getAgent().id)!=null){
						candidat.setEtatCandid(etatOK);
						candidat.save();
					}
					//sinon si la case Non a été coché, passage en état "non autorisé"
					else if(params.get("N"+candidat.getAgent().id)!=null){
						candidat.setEtatCandid(etatNON);
						candidat.setMotifRefus(params.get("R"+candidat.getAgent().id));
						candidat.save();
					}
				}
			}

		}
		choixAutorisationCandidatures();
	}

}